//package com.example.music_liwei.activity;
//
//import android.content.Intent;
//import android.graphics.Bitmap;
//import android.graphics.drawable.BitmapDrawable;
//import android.graphics.drawable.Drawable;
//import android.media.MediaPlayer;
//import android.os.Bundle;
//import android.os.Handler;
//import android.view.View;
//import android.widget.ImageView;
//import android.widget.SeekBar;
//import android.widget.TextView;
//
//import androidx.annotation.NonNull;
//import androidx.annotation.Nullable;
//import androidx.appcompat.app.AppCompatActivity;
//import androidx.appcompat.app.AppCompatDelegate;
//import androidx.fragment.app.FragmentManager;
//import androidx.palette.graphics.Palette;
//import androidx.viewpager.widget.ViewPager;
//
//import com.bumptech.glide.Glide;
//import com.bumptech.glide.request.target.SimpleTarget;
//import com.bumptech.glide.request.transition.Transition;
//import com.example.music_liwei.R;
//import com.example.music_liwei.adapter.FragmentViewPagerAdapter;
//import com.example.music_liwei.bean.ResponseData;
//import com.example.music_liwei.messageEvent.MessageEvent;
//import com.example.music_liwei.messageEvent.MessageEventCurrentIndexBoolean;
//import com.example.music_liwei.messageEvent.MessageEventSeekbar;
//
//import org.greenrobot.eventbus.EventBus;
//import org.greenrobot.eventbus.Subscribe;
//import org.greenrobot.eventbus.ThreadMode;
//
//import java.io.IOException;
//import java.util.List;
//import java.util.Random;
//
//public class MusicPlayerActivity extends AppCompatActivity implements View.OnClickListener {
//
//    private static final String TAG = "ning";
//    private List<ResponseData.MusicInfo> musicInfoList;
//    private MediaPlayer mediaPlayer;
//    private int currentIndex = 0;
//    private boolean isPause = false;
//    private int playMode = 0; // 0: 顺序播放, 1: 随机播放, 2: 单曲循环
//
//    private ImageView ivCover, ivPlayPause, ivNext, ivPrev, ivLoop, ivMenu;
//    private TextView tvMusicName, tvAuthor, tvCurrentTime, tvTotalTime;
//    private SeekBar seekBar;
//    private boolean isSeekBarChanging = false;
//    private boolean isXin = false;
//    private Handler handler = new Handler();
//    private ImageView iv_back;
//    private ImageView iv_xin;
//
//    @Override
//    protected void onCreate(@Nullable Bundle savedInstanceState) {
//        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_music_player);
//
//        EventBus.getDefault().register(this);
//
//        // 设置跟随系统的主题模式
//        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
//        setContentView(R.layout.activity_music_player);
//
//        ivPlayPause = findViewById(R.id.iv_player);
//        ivNext = findViewById(R.id.iv_right);
//        ivPrev = findViewById(R.id.iv_left);
//        ivLoop = findViewById(R.id.iv_xunhuan);
//        ivMenu = findViewById(R.id.iv_caidan);
//        tvMusicName = findViewById(R.id.tv_musicName);
//        tvAuthor = findViewById(R.id.tv_author);
//        seekBar = findViewById(R.id.seekBar);
//        tvCurrentTime = findViewById(R.id.tv_current_time);
//        tvTotalTime = findViewById(R.id.tv_total_time);
//        iv_back = findViewById(R.id.iv_back);
//        iv_xin = findViewById(R.id.iv_xin);
//        iv_back.setOnClickListener(this);
//        iv_xin.setOnClickListener(this);
//
//        mediaPlayer = new MediaPlayer();
//
//        ivPlayPause.setOnClickListener(v -> togglePlayPause());
//        ivNext.setOnClickListener(v -> playNext());
//        ivPrev.setOnClickListener(v -> playPrev());
//        ivLoop.setOnClickListener(v -> switchPlayMode());
//
//        // 初始化 ViewPager 和 Fragment 这是第三节课的知识，我直接拿来用了///////////////////////////////////////////////////////////////////////////
//        FragmentManager fragmentManager = getSupportFragmentManager();
//        FragmentViewPagerAdapter fragmentViewPagerAdapter = new FragmentViewPagerAdapter(fragmentManager);
//        ViewPager viewPager = findViewById(R.id.vp_show);
//        viewPager.setAdapter(fragmentViewPagerAdapter);
//
//        // 给进度条加的点击事件 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
//            @Override
//            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
//                if (fromUser && mediaPlayer != null) {
//                    mediaPlayer.seekTo(progress);
//                    tvCurrentTime.setText(formatTime(progress));
//                }
//            }
//
//            @Override
//            public void onStartTrackingTouch(SeekBar seekBar) {
//                isSeekBarChanging = true;
//            }
//
//            @Override
//            public void onStopTrackingTouch(SeekBar seekBar) {
//                isSeekBarChanging = false;
//                if (mediaPlayer != null) {
//                    mediaPlayer.seekTo(seekBar.getProgress());
//                }
//            }
//        });
//
//        mediaPlayer.setOnCompletionListener(mp -> onSongComplete());
//
//        if (musicInfoList != null && !musicInfoList.isEmpty()) {
//            playMusic(currentIndex);
//        }
//    }
//    //  onCreat结束///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    @Override
//    protected void onStart() {
//        super.onStart();
//        // 延迟发布事件，确保 Fragment 已经准备好 //////////////////////这一步解决了我首屏加载的问题，相当重要////////////////////////////////////////////////
//        new Handler().postDelayed(() -> {
//
//            EventBus.getDefault().postSticky(new MessageEventCurrentIndexBoolean(musicInfoList, currentIndex, !isPause)); // 发布事件
//
//            // 在加载图片后，获取其主题色并设置为布局的背景色
//            Glide.with(this)
//                    .load(musicInfoList.get(currentIndex).getCoverUrl())
//                    .into(new SimpleTarget<Drawable>() {
//                        @Override
//                        public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
//                            // 将 Drawable 转换为 Bitmap
//                            Bitmap bitmap = ((BitmapDrawable) resource).getBitmap();
//
//                            // 使用 Palette 从 Bitmap 中获取主题色
//                            Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
//                                @Override
//                                public void onGenerated(@Nullable Palette palette) {
//                                    if (palette != null) {
//                                        // 获取亮色中的某种颜色
//                                        int color = palette.getLightMutedColor(getResources().getColor(android.R.color.white));
//
//                                        // 设置布局背景色
//                                        findViewById(R.id.activity_music_player).setBackgroundColor(color);
//                                    }
//                                }
//                            });
//                        }
//
//                    });
//
//        }, 100);
//
//
//    }
//
//    @Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
//    public void onMessageEvent(MessageEvent event) {
//        musicInfoList = event.getMusicInfoList();
//        if (musicInfoList != null && !musicInfoList.isEmpty()) {
//            playMusic(currentIndex);
//        }
//
//    }
//
//    //  播放音乐 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    private void playMusic(int index) {
//        if (musicInfoList == null || musicInfoList.isEmpty() || index >= musicInfoList.size()) {
//            return;
//        }
//
//        ResponseData.MusicInfo musicInfo = musicInfoList.get(index);
//        tvMusicName.setText(musicInfo.getMusicName());
//        tvAuthor.setText(musicInfo.getAuthor());
//
//        mediaPlayer.reset();
//        try {
//            mediaPlayer.setDataSource(musicInfo.getMusicUrl());
//            mediaPlayer.prepare();
//            mediaPlayer.start();
//            isPause = true;
//            ivPlayPause.setBackgroundResource(R.drawable.play);
//            seekBar.setMax(mediaPlayer.getDuration());
//            tvTotalTime.setText(formatTime(mediaPlayer.getDuration()));
//            updateSeekBar();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//    //  点击和暂停的切换 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    private void togglePlayPause() {
//        EventBus.getDefault().postSticky(new MessageEventCurrentIndexBoolean(musicInfoList, currentIndex, !isPause)); // 发布事件
//        if (isPause) {
//            mediaPlayer.pause();
//            isPause = false;
//            ivPlayPause.setBackgroundResource(R.drawable.player);
//        } else {
//            mediaPlayer.start();
//            isPause = true;
//            ivPlayPause.setBackgroundResource(R.drawable.play);
//            updateSeekBar();
//        }
//    }
//
//    //  点击播放下一首歌 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    private void playNext() {
//        if (playMode == 1) {
//            currentIndex = new Random().nextInt(musicInfoList.size());
//        } else {
//            currentIndex = (currentIndex + 1) % musicInfoList.size();
//        }
//        playMusic(currentIndex);
//        EventBus.getDefault().postSticky(new MessageEventCurrentIndexBoolean(musicInfoList, currentIndex, !isPause)); // 发布事件
//    }
//
//    //  点击播放上一首歌 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    private void playPrev() {
//        if (playMode == 1) {
//            currentIndex = new Random().nextInt(musicInfoList.size());
//        } else {
//            currentIndex = (currentIndex - 1 + musicInfoList.size()) % musicInfoList.size();
//        }
//        playMusic(currentIndex);
//        EventBus.getDefault().postSticky(new MessageEventCurrentIndexBoolean(musicInfoList, currentIndex, !isPause)); // 发布事件
//    }
//
//    //  切换循环模式 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    private void switchPlayMode() {
//        playMode = (playMode + 1) % 3;
//        switch (playMode) {
//            case 0:
//                ivLoop.setBackgroundResource(R.drawable.xunhuan);
//                break;
//            case 1:
//                ivLoop.setBackgroundResource(R.drawable.suiji);
//                break;
//            case 2:
//                ivLoop.setBackgroundResource(R.drawable.xunhuan1);
//                break;
//        }
//    }
//
//    //  当歌曲播放完后，根据循环模式来判断播放下一首歌 /////////////////////////////////////////////////////////////////////////////////////
//    private void onSongComplete() {
//        if (playMode == 2) {
//            mediaPlayer.start();
//        } else {
//            playNext();
//        }
//    }
//
//    private void updateSeekBar() {
//        if (mediaPlayer == null) {
//            return; // Ensure mediaPlayer is not null
//        }
//
//        if (!isSeekBarChanging) {
//            seekBar.setProgress(mediaPlayer.getCurrentPosition());
//            tvCurrentTime.setText(formatTime(mediaPlayer.getCurrentPosition()));
//        }
//        if (isPause) {
//            seekBar.postDelayed(this::updateSeekBar, 1000);
//        }
//        // 延迟发布事件，确保 Fragment 已经准备好 //////////////////////这一步解决了我首屏加载的问题，相当重要////////////////////////////////////////////////
//        EventBus.getDefault().postSticky(new MessageEventSeekbar(musicInfoList, currentIndex, !isPause, mediaPlayer.getCurrentPosition())); // 发布事件
//
//
//
//    }
//
//    //  我在这里封装了一个时间模板 ///////////////////////////////////////////////////////////////////////////////////////////////////////
//    private String formatTime(int timeInMillis) {
//        int minutes = timeInMillis / 60000;
//        int seconds = (timeInMillis % 60000) / 1000;
//        return String.format("%02d:%02d", minutes, seconds);
//    }
//
//    @Override
//    protected void onDestroy() {
//        super.onDestroy();
//        EventBus.getDefault().unregister(this);
//        if (mediaPlayer != null) {
//            mediaPlayer.release();
//            mediaPlayer = null;
//        }
//        handler.removeCallbacksAndMessages(null); // Stop any pending callbacks
//    }
//
//    @Override
//    public void onClick(View v) {
//        if (v.getId() == R.id.iv_back) {
//            onBackClicked();
//        } else if (v.getId() == R.id.iv_xin) {
//            isXin = !isXin;
//            xin(isXin);
//        }
//    }
//
//    //  返回添加动画 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    private void onBackClicked() {
//        findViewById(R.id.activity_music_player).animate()
//                .translationY(findViewById(R.id.activity_music_player).getHeight())
//                .setDuration(500)
//                .withEndAction(() -> {
//                    Intent intent = new Intent(MusicPlayerActivity.this, MusicMainActivity.class);
//                    startActivity(intent);
//                    overridePendingTransition(0, 0);
//                })
//                .start();
//    }
//
//    //  点击切换爱心样式 ////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    private void xin(boolean isXin) {
//        if (isXin) {
//            iv_xin.setImageResource(R.drawable.redxin);
//        } else {
//            iv_xin.setImageResource(R.drawable.blackxin);
//        }
//    }
//}


//private void xin(boolean isXin) {
//        if (isXin) {
//        iv_xin.setImageResource(R.drawable.redxin);
//        } else {
//        iv_xin.setImageResource(R.drawable.blackxin);
//        }
//        }

//private String formatTime(int timeInMillis) {
//        int minutes = timeInMillis / 60000;
//        int seconds = (timeInMillis % 60000) / 1000;
//        return String.format("%02d:%02d", minutes, seconds);

//public void updateMusicList(List<ResponseData.MusicInfo> newMusicInfoList) {
//        this.musicInfoList = newMusicInfoList;
//        notifyDataSetChanged();
//        }
